#!/usr/bin/python
# -*- coding: utf-8 -*-

"""
  Обработчик стилей
"""

import logging
from os import path
from engine import settings
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.api import memcache

# enable info logging by the app
logging.getLogger().setLevel(logging.INFO)

class StylesHandler(webapp.RequestHandler):
  """Класс страницы стилей
  """

  def get(self, style = 'none'):
    """По методу GET забираем адрес стиля
    Args:
      self: класс страницы
      style: стиль который запросили (по-умолчанию none.css)
    """

    style_content = memcache.get('style_' + style)                                          # пытаемся получить стиль из кэша

    if (style_content is None): # or settings.DEBUG:                                         # если его там не нашлось
      style_path = path.join(path.dirname(__file__), settings.stylesPath, style + '.css')

      if not path.exists(style_path):
        style_path = path.join(path.dirname(__file__), settings.stylesPath, 'none.css')

      try:
        style_content = open(style_path).read()                                             # считываем стиль из файла
      except:
        style_content = 'error'
      
      memcache.add('style_' + style, style_content, settings.PAGECACHE)                     # кладем стиль в кэш

    self.response.headers['Content-Type'] = 'text/css; charset=utf-8'
    # self.response.headers.add_header('Expires', 'Mon, 01 Dec 1994 16:00:00 GMT')
    self.response.out.write(style_content)


def getStyles(page):
  """Получить стили для запрошенной страницы
  Args:
    page: URL страницы
  """

  lst = page.split('/')       # разделяем путь к стилю по категориям
  s = []                      # итоговые стили страницы
  for item in lst:            # проверяем каждый стиль, существует ли файл стиля
    if path.exists(path.join(path.dirname(__file__), settings.stylesPath, item + '.css')):
      s += [item]

  return s